- 1400/03/18
- 0
- 335
Pagination - مشکل در نمایش تعداد صفحه
سلام
بنده یک جدول با 2000 رکورد دارم که برای آن pagiantion تعریف کرده ام ولی داخل ویو کد را نتوانستم اصلاح کنم تا تعداد شماره صفحه محدود و مثلا 10 صفحه باشد .
کد داخل بفرم زیر هست:
<div class="row text-center">
<nav>
<ul class="pagination">
<li class="disabled"><a aria-label="Previous" href="#"><span aria-hidden="true">«</span></a></li>
@for (int i = 1; i <= (ViewBag.PageCount + 1); i++)
{
<li class="@(((int)ViewBag.PageID==i)?"active":"")"><a href="/Person /Index?pageid=@i">@i<span class="sr-only">(current)</span></a></li>
}
<li><a aria-label="Next" href="#"><span aria-hidden="true">»</span></a></li>
</ul>
</nav>
</div>
لطفا راهنمایی کنید کد را به چه صورتی اصلاح کنم
- 1400/03/20
مشکل اینه که شما دارید بر روی کل تعداد صفحات این حلقه رو اجرا می کنید و به تعداد همه صفحات اجرا می شود
باید یا استفاده از یک الگوریتم تعداد مشخصی مثلا 5 صفحه را بدست بیاورید و فقط آنها را نمایش دهید.
از کلاس زیر می توانید برای بدست آوردن تعداد صفحه ها استفاده کنید
public class Pager
{
public Pager(
long totalItems,
int currentPage = 1,
int pageSize = 10,
int maxPages = 5)
{
// calculate total pages
var totalPages = (int)Math.Ceiling((decimal)totalItems / (decimal)pageSize);
// ensure current page isn't out of range
if (currentPage < 1)
{
currentPage = 1;
}
else if (currentPage > totalPages)
{
currentPage = totalPages;
}
int startPage, endPage;
if (totalPages <= maxPages)
{
// total pages less than max so show all pages
startPage = 1;
endPage = totalPages;
}
else
{
// total pages more than max so calculate start and end pages
var maxPagesBeforeCurrentPage = (int)Math.Floor((decimal)maxPages / (decimal)2);
var maxPagesAfterCurrentPage = (int)Math.Ceiling((decimal)maxPages / (decimal)2) - 1;
if (currentPage <= maxPagesBeforeCurrentPage)
{
// current page near the start
startPage = 1;
endPage = maxPages;
}
else if (currentPage + maxPagesAfterCurrentPage >= totalPages)
{
// current page near the end
startPage = totalPages - maxPages + 1;
endPage = totalPages;
}
else
{
// current page somewhere in the middle
startPage = currentPage - maxPagesBeforeCurrentPage;
endPage = currentPage + maxPagesAfterCurrentPage;
}
}
// calculate start and end item indexes
var startIndex = (currentPage - 1) * pageSize;
var endIndex = Math.Min(startIndex + pageSize - 1, totalItems - 1);
// create an array of pages that can be looped over
var pages = Enumerable.Range(startPage, (endPage + 1) - startPage);
TotalPages = totalPages;
Pages = pages;
}
public IEnumerable<int> Pages { get; private set; }
public int TotalPages { get; private set; }
}
پاسخی برای این باگ ارسال کنید
لطفا کدها را درون قطعه کد ارسال نمایید
برای ارسال پاسخ باید وارد حساب کاربری خود شوید
ورود به حساب کاربری